/*
 * @author				: Juliano Zinni
 * @create				: 31/10/2011
 * @description			: Manutenção de matrículas do projeto
*/


	var functionsGridMatricula = {
		
		Projeto_codigo: ""
		
		,listaAlunosMatriculados: function(){
			var objparams = {
				Projeto_codigo: functionsGridMatricula.Projeto_codigo
			}
			alunosMatriculados.load({params : objparams});
		}
		
		
		,listaAlunosNaoMatriculados: function(){
			var objparams = {
				Projeto_codigo: functionsGridMatricula.Projeto_codigo
			}
			alunosNaoMatriculados.load({params : objparams});
		}
		
		,efetuarMatricula: function(codigoAluno){
			
			var objparams = {
				Projeto_codigo: functionsGridMatricula.Projeto_codigo,
				Aluno_Pessoa_codigo: codigoAluno,
				situacao: 'S'
				
			}
			efetuaMatricula.load({params : objparams, callback: functionsGridMatricula.returnEfetuarMatricula});
		}
		
		,returnEfetuarMatricula: function(record, options, success){
			if(success){
				Ext.ux.MessageBox.flash({
					msg: "Matrícula efetuada com sucesso",
					type: 'success'
				});
			}else{
				Ext.ux.MessageBox.flash({
					msg: "Ocorreu algum erro no momento de relacionar o aluno ao projeto",
					type: 'error'
				});
			}
		}
		
		
		,excluirMatricula: function(){
			
			var selectedRow = Ext.getCmp('gridAlunosMatriculados').getSelectionModel().getSelections();
			var objetoMatricula = selectedRow[0].data;
			
			var objparams = {
				Projeto_codigo: functionsGridMatricula.Projeto_codigo,
				Aluno_Pessoa_codigo: objetoMatricula.codigo
				
			}
			Ext.MessageBox.confirm('Confirmação de Exclusão','Tem certeza que deseja excluir essa matrícula?', function(btn){
				if(btn == 'yes')
				{
					excluiMatricula.load({params : objparams, callback: functionsGridMatricula.returnExcluirMatricula});
				}
			});
			
		}
		
		,returnExcluirMatricula: function(record, options, success){
			if(success){
				Ext.ux.MessageBox.flash({
					msg: "Matrícula excluída com sucesso",
					type: 'success'
				});
				
				alunosMatriculados.removeAll();
				alunosNaoMatriculados.removeAll();
				
				functionsGridMatricula.listaAlunosMatriculados();
				functionsGridMatricula.listaAlunosNaoMatriculados();
			}else{
				Ext.ux.MessageBox.flash({
					msg: "Ocorreu algum erro no momento de excluir a matrícula",
					type: 'error'
				});
			}
		}
		
		,ativarMatricula: function(){
			var selectedRow = Ext.getCmp('gridAlunosMatriculados').getSelectionModel().getSelections();
			var objetoMatricula = selectedRow[0].data;
			
			var objparams = {
				Projeto_codigo: functionsGridMatricula.Projeto_codigo,
				Aluno_Pessoa_codigo: objetoMatricula.codigo,
				situacao: 'S'
				
			}
			ativaMatricula.load({params : objparams, callback: functionsGridMatricula.returnAtivarMatricula});
		}
		
		
		,returnAtivarMatricula: function(record, options, success){
			if(success){
				Ext.ux.MessageBox.flash({
					msg: "Matrícula ativada com sucesso",
					type: 'success'
				});
				alunosMatriculados.removeAll();
				functionsGridMatricula.listaAlunosMatriculados();
			}else{
				Ext.ux.MessageBox.flash({
					msg: "Ocorreu algum erro no momento de ativação da matrícula",
					type: 'error'
				});
			}
		}
		
		
		,desativarMatricula: function(){
			var selectedRow = Ext.getCmp('gridAlunosMatriculados').getSelectionModel().getSelections();
			var objetoMatricula = selectedRow[0].data;
			
			var objparams = {
				Projeto_codigo: functionsGridMatricula.Projeto_codigo,
				Aluno_Pessoa_codigo: objetoMatricula.codigo,
				situacao: 'N'
				
			}
			desativaMatricula.load({params : objparams, callback: functionsGridMatricula.returnDesativarMatricula});

		}
		
		,returnDesativarMatricula: function(record, options, success){
			if(success){
				Ext.ux.MessageBox.flash({
					msg: "Matrícula desativada com sucesso",
					type: 'success'
				});
				alunosMatriculados.removeAll();
				functionsGridMatricula.listaAlunosMatriculados();
			}else{
				Ext.ux.MessageBox.flash({
					msg: "Ocorreu algum erro no momento de desativação da matrícula",
					type: 'error'
				});
			}
		}
	}
	
	
	var campos = [
		{name: 'codigo', mapping : 'codigo'},
		{name: 'nome', mapping : 'nome'},
		{name: 'situacao', mapping : 'situacao'}
	];
	
	
	var efetuaMatricula = new Ext.data.JsonStore({
		storeId		: 'efetuaMatricula',
		url			: baseURL + '/service/index.php?controller=ProjetoController&service=matricularAluno',
		root		: '',
		fields		: [],
		autoLoad	: false
	});
	
	
	var excluiMatricula = new Ext.data.JsonStore({
		storeId		: 'excluiMatricula',
		url			: baseURL + '/service/index.php?controller=ProjetoController&service=excluirMatricula',
		root		: '',
		fields		: [],
		autoLoad	: false
	});
	
	
	var ativaMatricula = new Ext.data.JsonStore({
		storeId		: 'ativaMatricula',
		url			: baseURL + '/service/index.php?controller=ProjetoController&service=alteraSituacaoMatricula',
		root		: '',
		fields		: [],
		autoLoad	: false
	});
	
	var desativaMatricula = new Ext.data.JsonStore({
		storeId		: 'desativaMatricula',
		url			: baseURL + '/service/index.php?controller=ProjetoController&service=alteraSituacaoMatricula',
		root		: '',
		fields		: [],
		autoLoad	: false
	});
	
	//Stores
	
	// create the data store
    var alunosNaoMatriculados = new Ext.data.JsonStore({
        fields : [
			{	
				name: 'codigo', 
				mapping : 'codigo'
			},
			{
				name: 'nome',
				mapping : 'nome'
			},
			{
				name: 'situacao',
				mapping : 'situacao'
			}
		],
		url: baseURL + '/service/index.php?controller=ProjetoController&service=listarAlunosDesmatriculados',
		root   		: 'elements'
    });
	
	var alunosMatriculados = new Ext.data.JsonStore({
        fields : [
			{	
				name: 'codigo', 
				mapping : 'codigo'
			},
			{
				name: 'nome',
				mapping : 'nome'
			},
			{
				name: 'situacao',
				mapping : 'situacao'
			}
		],
		url: baseURL + '/service/index.php?controller=ProjetoController&service=listarAlunosMatriculados',
		root   : 'elements'
    });
	

    var gridAlunosNaoMatriculados = new Ext.grid.GridPanel({
		ddGroup          : 'secondGridDDGroup',
        store            : alunosNaoMatriculados,
        columns          : [
			{
				header: "Código",
				width: 50,
				sortable: true,
				dataIndex: 'codigo'
			},
			
			{ 
				id : 'nome',
				header: "Nome Aluno",
				width: 160,
				sortable: true,
				dataIndex: 'nome'
			}
		],
		enableDragDrop   : true,
        stripeRows       : true,
        autoExpandColumn : 'nome',
		sm: new Ext.grid.RowSelectionModel({singleSelect:true}),
        title            : 'Alunos não Matriculados'
    });

    var gridAlunosMatriculados = new Ext.grid.GridPanel({
		id: 'gridAlunosMatriculados',
    	ddGroup          : 'firstGridDDGroup',
        viewConfig:{
    		emptyText		: 'Nenhum registro encontrado'
    		,deferEmptyText : false
    		,showPreview   : true
    		,enableRowBody : true
    		,getRowClass   : function(record, index) {
				if(record.data.situacao == "N") {
					return 'red_row';
				}
			}
		},
		store            : alunosMatriculados,
        columns          : [
			{
				header: "Código",
				width: 50,
				sortable: true,
				dataIndex: 'codigo'
			},
			
			{ 
				id : 'nome',
				header: "Nome Aluno",
				width: 160,
				sortable: true,
				dataIndex: 'nome'
			},
			
			{ 
				id : 'situacao',
				hidden: true,
				header: "Situação",
				width: 160,
				sortable: true,
				dataIndex: 'situacao'
			}
		],
		
		tbar: [
			{
				text: 'Desmatricular',
				id: 'btDesmatricular',
				iconCls: 'icon_cross',
				handler: functionsGridMatricula.excluirMatricula,
				disabled: true
			},
			{
				id: 'btAtivar',
				text: 'Ativar Matrícula',
				iconCls: 'icon_accept',
				handler: functionsGridMatricula.ativarMatricula,
				disabled: true
			},
			{
				id: 'btDesativar',
				text: 'Desativar Matrícula',
				iconCls: 'bt_deletar',
				handler: functionsGridMatricula.desativarMatricula,
				disabled: true
			}
		],
		enableDragDrop   : true,
        autoExpandColumn : 'nome',
        title            : 'Alunos Matriculados',
		sm: new Ext.grid.RowSelectionModel({singleSelect:true}),
		listeners: {
			afterrender: function(){
				var secondGridDropTargetEl = gridAlunosMatriculados.getView().scroller.dom;
				var secondGridDropTarget = new Ext.dd.DropTarget(secondGridDropTargetEl, {
					ddGroup    : 'secondGridDDGroup',
					notifyDrop : function(ddSource, e, data){
						var records =  ddSource.dragData.selections;
						Ext.each(records, ddSource.grid.store.remove, ddSource.grid.store);
						gridAlunosMatriculados.store.add(records);
						functionsGridMatricula.efetuarMatricula(records[0].data.codigo);
						return true;
					}
				});
			}
		}

		
		
    });

	gridAlunosMatriculados.getSelectionModel().on('selectionchange', function(sm){
		
		if(sm.getSelected() == undefined){
			Ext.getCmp('btDesativar').setDisabled(true)
			Ext.getCmp('btAtivar').setDisabled(true)
		}else{
			if(sm.getSelected().data.situacao == "S"){
				Ext.getCmp('btDesativar').setDisabled(sm.getCount() < 1)
			}else if(sm.getSelected().data.situacao == "N"){
				Ext.getCmp('btAtivar').setDisabled(sm.getCount() < 1)
			}
		}

		Ext.getCmp('btDesmatricular').setDisabled(sm.getCount() < 1)
	});
	
	
	/*
	 * @author				: Juliano Zinni
	 * @description			: Display que contém os grids para manipulação da matrícula
	*/
	var displayPanel = new Ext.Panel({
		width        : 650,
		height       : 300,
		layout       : 'hbox',
		border		 : false,
		defaults     : { flex : 1 },
		layoutConfig : { align : 'stretch' },
		items        : [
			gridAlunosNaoMatriculados,
			gridAlunosMatriculados
		]

	});

	
	var windowMatricula = new Ext.Window({
		width: 950
		,title: 'Manter Matrículas'
		,height: 550
		,modal:true
		,layout: 'fit'
		,closeAction: 'hide'
		,maximizable: true
		,items: displayPanel
		,listeners: {
			"hide": function(){
				Ext.getCmp('projeto').carregaGrid();
			},
			
			"afterrender": function(){
				alunosMatriculados.removeAll();
				alunosNaoMatriculados.removeAll();
				functionsGridMatricula.listaAlunosMatriculados();
				functionsGridMatricula.listaAlunosNaoMatriculados();
			}
	
	
		}
	});
	
	var blankRecord =  Ext.data.Record.create(campos);

	
	


